package modes

import (
	"fmt"
	"time"
)

/*
 * 描述：首资工作池
 *
 * weight : 0 C 1 B 2 A
 * state  : 0 正常接通 1 关停机 2 空号
 *
 ********************************************************************************************/
type WorkFirs struct {
	Id     int64  `json:"wf_id" xorm:"id"`               // 公 海  ID
	UId    int64  `json:"wf_uid" xorm:"uid"`             // 招生老师编号
	PId    int64  `json:"wf_p_id" xorm:"p_id"`           // 项   目   ID
	PName  string `json:"wf_p_name" xorm:"p_name"`       // 项 目  名 称
	Phone  int64  `json:"wf_phone" xorm:"phone"`         // 手   机   号
	SNote  string `json:"wf_s_note" xorm:"s_note"`       // 首 资  备 注
	UNote  string `json:"wf_u_note" xorm:"u_note"`       // 备        注
	CCount int64  `json:"wf_c_count" xorm:"call_count"`  // 拨 打  次 数
	City   int64  `json:"wf_city" xorm:"city"`           // 城市ADCODE
	CAt    int64  `json:"wf_c_at" xorm:"call_at"`        // 最近一次的拨打时间
	GetAt  int64  `json:"wf_get_at" xorm:"get_at"`       // 领  取 时 间
	SouId  int64  `json:"wf_source_id" xorm:"source_id"` // 来源ID
	Weight int    `json:"wf_weight" xorm:"weight"`       // 权重
	State  int    `json:"wf_state" xorm:"state"`         // 状态
}

func (this *WorkFirs) TableName() string {
	return "work_firs"
}

func (this *WorkFirs) Save() (int64, error) {
	this.GetAt = time.Now().Unix()
	return Db(2).Insert(this)
}

func (this *WorkFirs) Get() (bool, error) {
	return Db(2).Get(this)
}

func (this *WorkFirs) update(where string, field string) (int64, error) {
	return Db(2).Where(where).Cols(field).Update(this)
}

func (this *WorkFirs) IdSet(field string) (int64, error) {
	where := fmt.Sprintf("id = %d", this.Id)
	return this.update(where, field)
}

func (this *WorkFirs) count(where string) (int64, error) {
	var val WorkFirs
	return Db(2).Where(where).Count(&val)
}

func (this *WorkFirs) Del() (int64, error) {
	return Db(2).Where("id = ?", this.Id).Delete(this)
}

func (this *WorkFirs) where(fage, count, page int, where, field string) ([]WorkFirs, error) {
	list := make([]WorkFirs, 0)
	var err error
	if field == "" {
		field = "id"
	}
	page--
	if 0 == fage { // 从小到大排序
		err = Db(2).Where(where).
			Asc(field).
			Limit(count, page*count).
			Find(&list)
	} else { // 从大到小排序
		err = Db(2).Where(where).
			Desc(field).
			Limit(count, page*count).
			Find(&list)
	}
	return list, err
}

func (this *WorkFirs) List(val *Pager) error {
	val.TName = this.TableName()
	val.Total, _ = this.count(val.ToWhere())
	var field string
	switch val.Coll {
	case 0:
		field = "get_at" // 领取时间
	case 1:
		field = "call_at" // 最近一次的拨打时间
	case 2:
		field = "call_count" // 领取时间
	case 3:
		field = "weight" // 权重
	}
	list, err := this.where(val.Rules, val.Count, val.Page, val.ToWhere(), field)
	if err == nil {
		val.List = list
	}
	return err
}

func (this *WorkFirs) PhoneDel(phone int64) (int64, error) {
	return Db(2).Where("phone = ?", phone).Delete(this)
}
